// utils/storage.js - 本地存储工具

/**
 * 存储数据
 * @param {string} key 键名
 * @param {any} value 数据
 */
export const setItem = (key, value) => {
  try {
    // 对对象类型进行序列化
    if (typeof value === 'object' && value !== null) {
      value = JSON.stringify(value);
    }
    uni.setStorageSync(key, value);
  } catch (error) {
    console.error('存储数据失败:', error);
  }
};

/**
 * 获取数据
 * @param {string} key 键名
 * @param {any} defaultValue 默认值
 * @returns {any} 存储的数据或默认值
 */
export const getItem = (key, defaultValue = null) => {
  try {
    const value = uni.getStorageSync(key);
    if (value === null || value === undefined || value === '') {
      return defaultValue;
    }
    
    // 尝试解析JSON
    if (typeof value === 'string') {
      try {
        return JSON.parse(value);
      } catch (e) {
        // 不是JSON格式，返回原始值
        return value;
      }
    }
    
    return value;
  } catch (error) {
    console.error('获取数据失败:', error);
    return defaultValue;
  }
};

/**
 * 移除数据
 * @param {string} key 键名
 */
export const removeItem = (key) => {
  try {
    uni.removeStorageSync(key);
  } catch (error) {
    console.error('移除数据失败:', error);
  }
};

/**
 * 清空所有数据
 */
export const clear = () => {
  try {
    uni.clearStorageSync();
  } catch (error) {
    console.error('清空存储失败:', error);
  }
};

/**
 * 检查是否有某个键
 * @param {string} key 键名
 * @returns {boolean} 是否存在
 */
export const hasItem = (key) => {
  try {
    const value = uni.getStorageSync(key);
    return value !== null && value !== undefined && value !== '';
  } catch (error) {
    console.error('检查键失败:', error);
    return false;
  }
};

export default {
  setItem,
  getItem,
  removeItem,
  clear,
  hasItem
};